# CMake 最低版本要求
cmake_minimum_required(VERSION 3.16)

# 项目名称、版本和语言
project(QJanusClient VERSION 0.1 LANGUAGES CXX)

# 启用 Qt 的自动代码生成功能 (MOC, UIC, RCC)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# --- 查找 Qt6 ---
# 优先使用环境变量 QT6_PATH 作为查找提示
# find_package 会在 CMAKE_PREFIX_PATH 中指定的路径下查找
if(DEFINED ENV{QT6_PATH})
  # 将环境变量中的路径添加到 CMake 搜索路径列表的前面，提高优先级
  list(PREPEND CMAKE_PREFIX_PATH "$ENV{QT6_PATH}")
  message(STATUS "Using QT6_PATH hint: $ENV{QT6_PATH}")
endif()

# 查找 Qt6 的 Widgets 组件。REQUIRED 表示如果找不到就报错。
# 这会定义 Qt6::Widgets 等目标。
find_package(Qt6 REQUIRED COMPONENTS
    Core
    Gui
    Widgets
    Network WebSockets
    Multimedia
    OpenGL
    OpenGLWidgets
)
# find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) # 这是查找Qt6或Qt5的写法，但既然有QT6_PATH，就优先明确找Qt6

# 显示找到的 Qt 版本信息
message(STATUS "Found Qt version: ${Qt6_VERSION} installed in: ${Qt6_DIR}")

# FFmpeg
include_directories($ENV{FFMPEG_HEADER})
set(FFMPEG_LIB_DIR $ENV{FFMPEG_LIB})
# 链接的库目录
link_directories(
        ${FFMPEG_LIB_DIR}
)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/UI)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Camera)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/WebRTC)

# --- 创建可执行文件 ---
# 使用 Qt 6 提供的函数创建可执行文件
# 它会自动处理 MOC, UIC, RCC (因为 CMAKE_AUTO* 设置为 ON)


qt_add_executable(QJanusClient
        main.cpp
        WebRTC/cwebsocket.h
        WebRTC/cwebsocket.cpp
        UI/widget.ui
        UI/widget.h
        UI/widget.cpp
        UI/videomeetingui.h
        UI/videomeetingui.cpp
        UI/playimage.h
        UI/playimage.cpp
        Camera/CCamera.h
        Camera/CCamera.cpp
        Camera/videodecode.h
        Camera/videodecode.cpp
        Camera/readthread.h
        Camera/readthread.cpp
        rc.qrc
        fragment.fsh
        vertex.vsh
        WebRTC/janusclient.h WebRTC/janusclient.cpp
)

# --- 链接库 ---
# 链接 Qt Widgets 库
# 使用 Qt6::Widgets (或版本无关的 Qt::Widgets) 目标
target_link_libraries(QJanusClient PRIVATE
    Qt6::Core
    Qt6::Gui
    Qt6::Widgets
    Qt6::Network
    Qt6::WebSockets
    Qt6::Multimedia
    Qt6::OpenGL
    Qt6::OpenGLWidgets



    avformat.lib
    avcodec.lib
    avdevice.lib
    avfilter.lib
    avutil.lib
    postproc.lib
    swresample.lib
    swscale.lib
)

# --- 设置特定平台的目标属性 ---
# 设置 macOS Bundle 和 Windows 可执行文件属性
set_target_properties(QJanusClient PROPERTIES
        MACOSX_BUNDLE_GUI_IDENTIFIER "com.example.QJanusClient" # macOS 应用唯一标识符
        MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
        MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
        MACOSX_BUNDLE TRUE           # 在 macOS 上创建 Bundle
        WIN32_EXECUTABLE TRUE      # 在 Windows 上创建窗口应用程序 (隐藏控制台)
)

# --- 安装规则 ---
# 包含 GNU 标准安装目录变量 (如 CMAKE_INSTALL_BINDIR)
include(GNUInstallDirs)

# 定义安装目标
install(TARGETS QJanusClient
        BUNDLE DESTINATION .  # macOS Bundle 安装到哪里
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # 可执行文件安装目录
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # (如果目标是库) 库文件安装目录
        # ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # (如果目标是库) 静态库/导入库安装目录
)
